import { createStore } from 'vuex'
// 状态管理 存放全局的数据 同时定义管理这些数据的方法
// 定义setLocalCartList方法用于将购物车内的商品信息存储到浏览器本地存储当中
const setLocalCartList = (state) => {
	const { cartList } = state
	// stringify将对象转换成字符串
	localStorage.cartList = JSON.stringify(cartList)
}
// const setLocalOrderList = (state) => {
// 	const { orderList } = state
// 	// stringify将对象转换成字符串
// 	localStorage.orderList = JSON.stringify(orderList)
// }
// 定义getLocalCartList方法，获取本地存储当中的cartList数据
const getLocalCartList = () => {
	try{
		return JSON.parse(localStorage.cartList)
	}catch(e){
		return {}
	}
}
// const getLocalOrderList = () => {
// 	try{
// 		return JSON.parse(localStorage.orderList)
// 	}catch(e){
// 		localStorage.orderList = []
// 	}
// }
// const getLocaluser = () => {
// 	try{
// 		return JSON.parse(localStorage.user)
// 	}catch(e){
// 		localStorage.user = []
// 	}
// }
export default createStore({
	// state存放数据
  state: {
	  // 定义一个对象 用于存放购物车当中的所有产品信息
	  cartList:getLocalCartList(),
	  // 定义一个变量，用于存放订单的内容
	//   orderList:getLocalOrderList() || [],
	//   user: getLocaluser() || []
  }, 
  // 修改数据
  mutations: {
		// account(state,payload){
		// 	const { username,userpassword } = payload;
		// 	const userInfo = {}
		// 	userInfo.username = username
		// 	userInfo.password = userpassword
		// 	state.user.unshift(userInfo)
		// 	localStorage.user = JSON.stringify(state.user)
		// 	console.log(state.user)
		// },
	  addItem(state,payload){
		  const { shopId,productId,productInfo,num,shopName } = payload;
		  // 首先 拿到店铺里面所有的产品信息
		  let shopInfo = state.cartList[shopId]
		  // 判断有无这家店铺，没有则创建一个空对象
		  if(!shopInfo){ shopInfo = { shopName: '',shopId:'',productList:{} } }
		  shopInfo.shopName = shopName
		  shopInfo.shopId = shopId
		  // 拿到产品ID对应的产品相关信息，存放到product里面
		  // 如果没有这个产品，将传递进来的产品信息赋值给product，同时添加一个属性count
		  let product = shopInfo.productList[productId]
		  if(!product){
			  product = productInfo
			  product.count = 0
		  }
		  product.count = product.count + num
		  if(num > 0){ product.check = true }
		  if(product.count <= 0){product.count = 0}
		  shopInfo.productList[productId] = product
		  state.cartList[shopId] = shopInfo
		//   console.log(shopInfo);
		  setLocalCartList(state)
		  // 
	  },
	  changeChecked(state,payload){
		  const { shopId,productId } = payload;
		  const product = state.cartList[shopId].productList[productId]
		  product.check = !product.check
		  setLocalCartList(state)
	  },
	  // 通过setAllChecked方法实现全选按钮的功能
	  setAllChecked(state,payload){
		  const { shopId,cc } = payload;
		  // 通过店铺ID 可以拿到所有的商品信息
		  const products = state.cartList[shopId].productList
		  for(let i in products){
			  // 通过循环 拿到每一个商品的信息
			  const product = products[i]
			  product.check = cc
		  }
		//   数据修改完成，存放本地储存
		  setLocalCartList(state)
	  },

	//   为什么不需要穿shopID?   这个方法是针对当前购物车内店铺的全选，可以通过
	  setCartAllChecked(state,payload){
		const { cc } = payload;
		// 通过店铺ID 可以拿到所有的商品信息
		for(let e in state.cartList){
			const products = state.cartList[e].productList
			for(let i in products){
				// 通过循环 拿到每一个商品的信息
				const product = products[i]
				product.check = cc
			}
		}
		setLocalCartList(state)
	  },
	  clearCart(state,payload){
		  const { shopId } = payload
		  state.cartList[shopId] = { shopName: '',productList:{} }
		  setLocalCartList(state)
	  },
	  clearOrderData(state,payload){
		  const { shopId,isCanceled,products } = payload;
		  // 删除商品=将商品数量变为0
		  // 首先通过店铺id，获取所有商品信息
		  const productList = state.cartList[shopId].productList
		  // 定义一个变量用于存放当前这个订单的相关信息
		//   const order = {}
		//   order.shopName = state.cartList[shopId].shopName
		//   order.products = {}
		//   order.isCanceled = isCanceled
		//   order.totalPrice = 0
		//   order.count = 0
		  for(let i in productList){
			  // 通过循环获取每个商品信息
			  const product = productList[i]
			  if(product.check){
				product.count = 0 
			  }
		  }

		  setLocalCartList(state)
	  }
  },
  // 
  actions: {
  },
  modules: {
  }
})
